package com.zenchn.aliyun.oss.api;

import com.zenchn.entity.JsonResult;

import java.io.File;
import java.io.InputStream;
import java.util.Map;

/**
 * oss上传 接口
 * @author dingxinfa
 * @date 2018-08-16
 */
public interface OssUploadService {




	/**
	 * 简单上传 byte数组上传  MD5验证
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param bytes byte数组
	 * @return 返回是json
	 */
	JsonResult<Map> simplyUploadByBytes(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, byte[] bytes);



	/**
	 * 简单上传 上传网络流(inputStream or file 都有可能)
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param url  网络地址
	 * @return 返回是json
	 */
	JsonResult<Map> simplyUploadByUrl(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, String url);



	/**
	 * 简单上传 上传文件  MD5验证
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param localFilePath  文件路径
	 * @return 返回是json
	 */
	JsonResult<Map> simplyUploadByFile(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, String localFilePath);


	/**
	 * 简单上传 上传文件  MD5 验证
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param localFile  文件
	 * @return 返回是json
	 */
	JsonResult<Map> simplyUploadByFile(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, File localFile);



	/**
	 * 追加上传 输入流上传
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param contentType  上传内容类型
	 * @param inputStream 输入流
	 * @return 返回是json
	 */
	JsonResult<Map> appendUploadByInputStream(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, String contentType, InputStream inputStream);

	/**
	 * 断点续传 文件上传
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param contentType  上传内容类型
	 * @param localFilePath 本地文件路径
	 * @param callbackUrl  回调服务器地址  可为空
	 * @return 返回是json
	 */
	JsonResult<Map> breakpointUploadByFile(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, String contentType, String localFilePath, String callbackUrl);

	/**
	 * 分片上传
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param localFilePath 本地文件路径
	 * @param callbackUrl  回调服务器地址  可为空
	 * @return
	 */
	JsonResult<Map> multipartUploadByFile(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, String localFilePath, String callbackUrl);



	/**
	 * 分片上传
	 * @param endpoint oss服务器
	 * @param accessKeyId oss授权key
	 * @param accessKeySecret oss授权密钥
	 * @param bucketName 存储空间
	 * @param objectName 存储对象
	 * @param localFile 分片文件对象
	 * @param callbackUrl  回调服务器地址  可为空
	 * @return 返回是json
	 */
	JsonResult<Map> multipartUploadByFile(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String objectName, File localFile, String callbackUrl);


}
